home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / dev / gg / ncurses-5.3.lha / ncurses-5.3 / form / fty_ipv4.c < prev    next >
C/C++ Source or Header  |  2002-10-24  |  3KB  |  82 lines

  1.  
  2. /*
  3.  * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT.
  4.  * You may freely copy it for use as a template for your own field types.
  5.  * If you develop a field type that might be of general use, please send
  6.  * it back to the ncurses maintainers for inclusion in the next version.
  7.  */
  8. /***************************************************************************
  9. *                                                                          *
  10. *  Author : Per Foreby, perf@efd.lth.se                                    *
  11. *                                                                          *
  12. ***************************************************************************/
  13.  
  14. #include "form.priv.h"
  15.  
  16. MODULE_ID("$Id: fty_ipv4.c,v 1.4 2000/12/09 23:46:12 tom Exp $")
  17.  
  18. /*---------------------------------------------------------------------------
  19. |   Facility      :  libnform  
  20. |   Function      :  static bool Check_IPV4_Field(
  21. |                                      FIELD * field,
  22. |                                      const void * argp)
  23. |   
  24. |   Description   :  Validate buffer content to be a valid IP number (Ver. 4)
  25. |
  26. |   Return Values :  TRUE  - field is valid
  27. |                    FALSE - field is invalid
  28. +--------------------------------------------------------------------------*/
  29. static bool Check_IPV4_Field(FIELD * field, const void * argp GCC_UNUSED)
  30. {
  31.   char *bp = field_buffer(field,0);
  32.   int num = 0, len;
  33.   unsigned int d1, d2, d3, d4;
  34.  
  35.   if(isdigit((unsigned char)*bp)) /* Must start with digit */
  36.     {
  37.       num = sscanf(bp, "%u.%u.%u.%u%n", &d1, &d2, &d3, &d4, &len);
  38.       if (num == 4)
  39.         {
  40.           bp += len;            /* Make bp point to what sscanf() left */
  41.           while (*bp && isspace((unsigned char)*bp))
  42.             bp++;               /* Allow trailing whitespace */
  43.         }
  44.     }
  45.   return ((num != 4 || *bp || d1 > 255 || d2 > 255
  46.                            || d3 > 255 || d4 > 255) ? FALSE : TRUE);
  47. }
  48.  
  49. /*---------------------------------------------------------------------------
  50. |   Facility      :  libnform  
  51. |   Function      :  static bool Check_IPV4_Character(
  52. |                                      int c, 
  53. |                                      const void *argp )
  54. |   
  55. |   Description   :  Check a character for unsigned type or period.
  56. |
  57. |   Return Values :  TRUE  - character is valid
  58. |                    FALSE - character is invalid
  59. +--------------------------------------------------------------------------*/
  60. static bool Check_IPV4_Character(int c, const void * argp GCC_UNUSED)
  61. {
  62.   return ((isdigit(c) || (c=='.')) ? TRUE : FALSE);
  63. }
  64.  
  65. static FIELDTYPE typeIPV4 = {
  66.   _RESIDENT,
  67.   1,                           /* this is mutable, so we can't be const */
  68.   (FIELDTYPE *)0,
  69.   (FIELDTYPE *)0,
  70.   NULL,
  71.   NULL,
  72.   NULL,
  73.   Check_IPV4_Field,
  74.   Check_IPV4_Character,
  75.   NULL,
  76.   NULL
  77. };
  78.  
  79. NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_IPV4 = &typeIPV4;
  80.  
  81. /* fty_ipv4.c ends here */
  82.